package org.wupuser.service.impl;

import jakarta.annotation.Resource;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Service;
import org.wupuser.model.Admin;
import org.wupuser.model.DTO.LoginRequest;
import org.wupuser.repository.AdminRepository;
import org.wupuser.service.AdminService;
import org.wupuser.util.JWTTokenUtil;
import org.wupuser.util.JedisUtils;

@Service
public class AdminServiceImpl implements AdminService {
	@Resource
	private AdminRepository adminRepository;
	
	/**
	 * 管理员登录方法
	 *
	 * @param name     用户名
	 * @param password 密码
	 *
	 * @return 返回ResponseEntity对象，包含登录结果信息
	 */
	@Override
	public ResponseEntity<LoginRequest> login(
		// 用户名参数
		String name,
		// 密码参数
		String password) {
		// 根据用户名从数据库查询管理员信息
		Admin admin = adminRepository.findByName(name);
		// 创建登录请求响应对象
		LoginRequest loginRequest = new LoginRequest();
		// 判断管理员是否存在且密码正确
		if (admin != null && admin.getPwd()
			.equals(password)) {
			// 生成JWT令牌，用户名和密码组合作为参数
			String token = JWTTokenUtil.getToken(name + password);
			// 将令牌存储到Redis中，设置过期时间为3600秒
			JedisUtils.setex(
				name,
				3600,
				token);
			// 登录成功，设置成功消息和数据
			loginRequest.setMessage("登录成功");
			loginRequest.setToken(token);
			loginRequest.setData(admin);
			// 返回200状态码和登录成功信息
			return ResponseEntity.status(200)
				.body(loginRequest);
		}
		// 登录失败，设置错误消息
		loginRequest.setMessage("用户名或密码错误");
		// 返回400状态码和登录失败信息
		return ResponseEntity.status(400)
			.body(loginRequest);
	}
	
	/**
	 * 退出方法，用于处理管理员退出操作
	 *
	 * @param name 管理员名称，用于标识要退出的用户
	 *
	 * @return ResponseEntity 返回响应实体，包含状态码和响应信息
	 */
	@Override
	public ResponseEntity<?> exit(String name) {
		// 检查Redis中是否存在该用户的token
		if (JedisUtils.get(name)
			.isEmpty()) {
			// 如果token不存在或已过期，返回提示信息
			return ResponseEntity.status(200)
				.body("Token不存在，该管理员实际已退出，请刷新网页");
		}
		// 如果token存在，则从Redis中删除该用户的token
		JedisUtils.del(name);
		// 返回退出成功的响应
		return ResponseEntity.status(200)
			.body("退出成功");
	}
}
